본문으로 건너뛰기

05.08 일지

새 Activity(with BottomNavigator) 만들어서 사용하기


Android Studio 이용 → Activity 생성

다양한 템플릿의 Activity 생성이 가능했다. HomeActivity 생성 (with BottomNavigator)

위의 방법을 사용하니 필요한 레이아웃에 대해 필요한 Class, XML파일을 자동으로 생성됐다

  • HomeActivity.kt
  • {Item}Fragment.kt
  • {Item}ViewModel.kt
  • res/layout/activity_home,fragment_{item}.xml
  • res/navigation/mobile_navigation.xml
  • res/menu/bottom_nav_menu.xml
  • res/drawable/ic_{item}_black_24dp.xml

Fragment에서... onCreateView():View

: Fragment가 만들어질 때 같이 보여줄 View 명시

onCreateView(..): View {
val challengeViewModel
= ViewModelProvider(this).get(ChallengeViewModel::class.java)
}

ViewModelProvider.get() ⇒ Fragment ~ ViewModel 연결

View를 반환하는 방법

  1. inflater.inflate() ⇒ 해당 View를 inflate해서 반환한다. inflate: 레이아웃 XML파일의 값을 초기화해서 View 오브젝트에 저장하는 과정
  2. binding.root ⇒ 대표 View를 반환한다. Fragment{Item}Binding Binding class: 해당 컴포넌트에서 사용하는 연관된 View의 정보가 묶인 것, Binding.ID로 접근가능

onCreateView()의 인자값 ViewGroup

: 만들어질 View의 부모 View 컴포넌트를 명시해준다 (에디터가 알아서 인자값 입력)

ViewGroup의 종류: LinearLayout, RelativeLayout, FrameLayout, ConstraintLayout, GridLayout 등


BottomNavigator 연관관계

in HomeActivity.kt : navigator를 쓸 Activity → binding.navView로 바에서 사용될 View를 명시 → findNavController(ID)로 사용될 Navigate fragment 명시

AppBarConfiguration에서 사용될 Item들(res/menu/item) 명시


in res/navigation/mobile_navigation.xml : navigation을 위한 Fragment → app:startDestination="ID"로 default 화면 명시 → <fragment />로 사용할 item들 명시

→ 사용될 Item(res/menu/) 명시


in res/menu/bottom_nav_menu.xml : navigation에 들어갈 item들 모임 → <item />로 사용할 item들의 디테일(icon, title) 명시

res/drawable/로 사용될 아이콘 명시


in res/drawable/ic_{item}_black_24dp.xml : item으로 쓰일 아이콘을 그려서 명시해줌


in {Item}Fragment.kt, {Item}ViewModel.kt : Navigator으로 이동한 후 보여줄 화면


in res/layout/activity_home,fragment_{item}.xml : 보여줄 화면의 layout

res/navigation/를 사용함을 명시


BottomNavigator를 만드는 도중 직면한 문제

⇒ IDE가 만든 kt파일의 이름을 수정하면 연관된 xml파일도 같이 수정되도록 refactor를 하고 싶었지만 지원을 안하는 것 같아 수동으로 교체했는데 리팩토링 방법 알아보기

⇒ 들어갈 Item의 icon을 바꾸고 싶은데 material icon이 이름으로 설정돼있는게 아니라 벡터이미지로 그려져 있음.. material.cancel 이런 식으로 접근할 수 없는지 찾아보기